﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using ZXing.QrCode;
using ZXing;
using ZXing.Common;
using pringApp;
using Newtonsoft.Json.Linq;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
namespace PrintApp
{
    class PrintService
    {
        private EncodingOptions options = null;
        private BarcodeWriter writer = null;
        private Margins margin;
        private PrintDocument printDocument;
        //打印的当前页
        private int _curr;
        private JArray ticketFaces;
        private Boolean isSetting;
        private string imgbase64 = "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";
        
        //打印票面的方法
        public PrintService(PrintSetting printSetting, JArray printItems)
        {
            ticketFaces = printItems;
            if (printSetting != null && printSetting.priterName != null)
            {
                printDocument = new PrintDocument();
                //获取边距
                //printSetting.Left,  printSetting.Top
                //获取打印设置
                printDocument.PrinterSettings.PrinterName = printSetting.priterName;
                isSetting = true;
            }
            else
            {
               
                MessageBox.Show("请设置面单的打印机", "设置打印机", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
            }
        }
        public Boolean isSetPrint() {
            return isSetting;
        }
        //打印方法
        public void Print()
        {
            if (!isSetting) {
                return;
            }
            printDocument.DefaultPageSettings.Landscape = true; //横向打印
            printDocument.PrintController = new StandardPrintController();
            printDocument.PrintPage += printDocument_PrintPage;
            //printDocument.BeginPrint +=;
            //如果不适用缺省纸张则创建一个自定义纸张，注意，必须使用这个版本的构造函数才是自定义的纸张
    

            //将缺省的纸张设置为新建的自定义纸张
           // printDocument.DefaultPageSettings.PaperSize = ps;
            printDocument.DefaultPageSettings.Margins.Top = 0;  //设置顶部页边距 
            printDocument.DefaultPageSettings.Margins.Left = 1;  //设置顶部页边距 
         
            //printDocument.DefaultPageSettings.Margins.Right = 50;
            //printDocument.DefaultPageSettings.Margins.Bottom = 0;
            printDocument.OriginAtMargins = false;   //true = soft margins, false = hard margins
            printDocument.DefaultPageSettings.Landscape = false;

            printDocument.OriginAtMargins = true;
            printDocument.Print(); //打印
        }
        //打印事件
        private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
        {

            //创建Graphics类对象
            Graphics g = e.Graphics;
          
            RectangleF marginBounds = e.MarginBounds;

            // Grab a copy of our "hard margins" (printer's capabilities) 
            // This varies between printer models. Software printers like 
            // CutePDF will have no "physical limitations" and so will return 
            // the full page size 850,1100 for a letter page size.
            RectangleF printableArea = e.PageSettings.PrintableArea;

            // If we are print to a print preview control, the origin won't have 
            // been automatically adjusted for the printer's physical limitations. 
            // So let's adjust the origin for preview to reflect the printer's 
            // hard margins.

            g.TranslateTransform(printableArea.X, printableArea.Y);

            Brush brush = new SolidBrush(Color.Black);
            //以毫米为单位画图
            g.PageUnit = GraphicsUnit.Millimeter;
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);
       
            StringFormat sf = new StringFormat();
            sf.LineAlignment = StringAlignment.Near;
            //Response.Write("ID:" + obj["ID"].ToString() + "    Name:" + obj["Name"].ToString() + "     ");
            sf.Alignment = StringAlignment.Far;

            Font fontddyun = new Font("宋体", (float)14, FontStyle.Bold);
            Font fonttxtRegular = new Font("宋体", (float)10, FontStyle.Regular);

            Pen newPen = new Pen(Color.Black, (float)0.1);//定义一个画笔
            int i = _curr;

            Console.WriteLine("======qrcode=========Width==================" + ticketFaces[i].ToString());

            JObject tempo = JObject.Parse(ticketFaces[i].ToString());
            //------------------面单上联---------------------------------------------------
            string number = (string)tempo["number"].ToString(); //快递单号
            drawTitle(g, 0, brush, number);

            drawLine(g, 0, brush);
            JObject recipientJson = (JObject)tempo["recipient"]; //收件人
                                                                 //收件人
            drawRecipients(g, 0, brush, recipientJson);
            drawLine(g, 20, brush);
         

            JObject ordersJson = (JObject)tempo["orders"]; //配送信息
                                                           //配送信息
            drawDistInfo(g, 0, brush, ordersJson);

            drawLine(g, 50, brush);
            //投保礼
            //string gift = (string)tempo["gift"].ToString(); //快递单号
            //drawGift(g, 0, brush, gift);

            //drawLine(g, 65, brush);
            //寄件人
            JObject senderJson = (JObject)tempo["sender"]; //收件人
            drawSender(g, -15, brush, senderJson);
            //g.DrawLine(newPen, (float)2, (float)95, (float)102, (float)95);
            drawLine(g, 80-15, brush);

            g.DrawString("签收人:", fonttxtRegular, brush, (float)4, (float)98-15);
            g.DrawString("日期:", fonttxtRegular, brush, (float)60, (float)98 - 15);
            //------------------面单下联---------------------------------------------------
            drawTitle(g, 111, brush, number);
            drawLine(g, 111, brush);
            //收件人
            drawRecipients(g, 111, brush, recipientJson);
            drawLine(g, 130, brush);
            //寄件人
            drawSender(g, 67, brush, senderJson);

            //点点好车主二维码

            drawWxgzh(g, brush);
            drawLine(g, 147, brush);

            //备注
            string remark = (string)tempo["remark"].ToString(); //备注
            drawRemarks(g, 165, brush, remark);

            drawLine(g, 162, brush);

            i++;
            if (i < ticketFaces.Count)
             {
              this._curr = i;
              e.HasMorePages = true;
              }
              else
             {
                e.HasMorePages = false;
              }

        }

        private void drawTitle(Graphics g, float step, Brush brush,string number)
        {
            Font fontddyun = new Font("宋体", (float)14, FontStyle.Bold);


            // 点点云鸟
            g.DrawString("", fontddyun, brush, (float)4, (float)8 + step);
            string code = number;

            g.DrawImage(barCode(g, code), new PointF[]
               {
                    new PointF((int) Math.Round((float)48), (int) Math.Round((float)3+step)),
                    new PointF((int) Math.Round((float)98), (int) Math.Round((float)3+step)),
                    new PointF((int) Math.Round((float)48), (int) Math.Round((float)16+step))
               });
        }

        private void drawLine(Graphics g, float step, Brush brush)
        {
            //打印不画底图
            Pen newPen = new Pen(Color.Black, (float)0.1);//定义一个画笔
            g.DrawLine(newPen, (float)2, (float)15 + step, (float)102, (float)15 + step);
        }

        private void drawRecipients(Graphics g, float step, Brush brush, JObject recipientJson)
        {
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);

            string name = recipientJson["name"].ToString();
            string phone = recipientJson["phone"].ToString();
            string address = recipientJson["address"].ToString();
            g.DrawString("收件", fontsj, new SolidBrush(Color.Black), 4, 20 + step, new StringFormat(StringFormatFlags.DirectionVertical));
            Font fonttxtbold = new Font("宋体", (float)10, FontStyle.Bold);
            Font fonttxtRegular = new Font("宋体", (float)10, FontStyle.Regular);
            g.DrawString(name, fonttxtbold, brush, (float)12, (float)18 + step);
            g.DrawString("", fonttxtbold, brush, (float)30, (float)18 + step);
            System.Drawing.Rectangle fontRectanledizhi = new System.Drawing.Rectangle(12, 23 + (int)step, 90, 10);
            StringFormat sfFar = new StringFormat();
            sfFar.Alignment = StringAlignment.Near;
            sfFar.LineAlignment = StringAlignment.Near;

            g.DrawString(address, fonttxtbold, brush, fontRectanledizhi, sfFar);
        }

        private void drawDistInfo(Graphics g, float step, Brush brush,JObject ordersJson)
        {
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);
            Font fonttxtbold = new Font("宋体", (float)10, FontStyle.Bold);
            Font fonttxtRegular = new Font("宋体", (float)10, FontStyle.Regular);

            string orderNo = ordersJson["orderNo"].ToString();
            string total = ordersJson["total"].ToString();
            string licenceNo = ordersJson["licenceNo"].ToString(); 
            g.DrawString("配送信息", fontsj, new SolidBrush(Color.Black), 4, 40, new StringFormat(StringFormatFlags.DirectionVertical));

            g.DrawString("订单号:", fonttxtRegular, brush, (float)12, (float)37);
            g.DrawString(orderNo, fonttxtRegular, brush, (float)25, (float)37);
            JArray items = (JArray)JsonConvert.DeserializeObject(ordersJson["product"].ToString());
            int stepext = 42;
            for (int a = 0; a < items.Count; a = a + 1)
            {
                if(a > 2){
                    //更多扫描二维码查看
                    break;
                }
                JObject tempo = JObject.Parse(items[a].ToString());
                g.DrawString("产品:", fonttxtRegular, brush, (float)12, (float)stepext);
                g.DrawString(tempo["prName"].ToString(), fonttxtRegular, brush, (float)20, (float)stepext);
                g.DrawString("投保公司:", fonttxtRegular, brush, (float)32, (float)stepext);
                g.DrawString(tempo["company"].ToString(), fonttxtRegular, brush, (float)48, (float)stepext);
                stepext = stepext + 5;
               
            }

            Font fontdd = new Font("宋体", (float)12, FontStyle.Bold);
            g.DrawString("订单总额:", fontdd, brush, (float)12, (float)stepext+7);
            g.DrawString(total+"元", fontdd, brush, (float)32, (float)stepext+7);


            Bitmap qrcode = qrCode(orderNo, licenceNo);

            Console.WriteLine("======qrcode=========Width==================" + qrcode.Width);
            Console.WriteLine("======qrcode=========Height==================" + qrcode.Height);

            g.DrawImage(qrcode, new PointF[]
                {
                new PointF((int) Math.Round((float)65), (int) Math.Round((float)37)),
                new PointF((int) Math.Round((float)90), (int) Math.Round((float)37)),
                new PointF((int) Math.Round((float)65), (int) Math.Round((float)62))
                });
            g.DrawString("详情及付款扫码", fonttxtRegular, brush, (float)91, (float)37, new StringFormat(StringFormatFlags.DirectionVertical));

        }

        private void drawGift(Graphics g, float step, Brush brush,string gift)
        {
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);
            Font fonttxtbold = new Font("宋体", (float)10, FontStyle.Bold);
            Font fonttxtRegular = new Font("宋体", (float)8, FontStyle.Regular);
            g.DrawString("投保礼", fontsj, new SolidBrush(Color.Black), 4, 66, new StringFormat(StringFormatFlags.DirectionVertical));
            System.Drawing.Rectangle fontRectanle = new System.Drawing.Rectangle(12, 67, 85, 15);
            StringFormat sfFar = new StringFormat();
            sfFar.Alignment = StringAlignment.Near;
            sfFar.LineAlignment = StringAlignment.Near;
            g.DrawString(gift, fonttxtRegular, new SolidBrush(Color.Black), fontRectanle, sfFar);
        }

        private void drawSender(Graphics g, float step, Brush brush, JObject senderJson)
        {
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);
            Font fonttxtbold = new Font("宋体", (float)10, FontStyle.Bold);
            Font fonttxtRegular = new Font("宋体", (float)10, FontStyle.Regular);

            string name = senderJson["name"].ToString();
            string phone = senderJson["phone"].ToString();
            g.DrawString("寄件", fontsj, new SolidBrush(Color.Black), 4, 82 + step, new StringFormat(StringFormatFlags.DirectionVertical));
            g.DrawString("顾问:", fonttxtRegular, brush, (float)12, (float)83 + step);
            g.DrawString(name, fonttxtRegular, brush, (float)20, (float)83 + step);
           // g.DrawString("电话:", fonttxtRegular, brush, (float)12, (float)88 + step);
            //g.DrawString(phone, fonttxtRegular, brush, (float)20, (float)88 + step);
        }
        private void drawWxgzh(Graphics g, Brush brush)
        {
            //点点好车主二维码
            Bitmap bitbmp = Base64StringToImage(imgbase64);
            Font fonttxtRegular = new Font("宋体", (float)9, FontStyle.Regular);
            g.DrawImage(bitbmp, new PointF[]
                          {
                new PointF((int) Math.Round((float)75), (int) Math.Round((float)146.5)),
                new PointF((int) Math.Round((float)90), (int) Math.Round((float)146.5)),
                new PointF((int) Math.Round((float)75), (int) Math.Round((float)161.5))
                          });
            g.DrawString("点点好车主", fonttxtRegular, brush, (float)91, (float)145, new StringFormat(StringFormatFlags.DirectionVertical));
        }
        private void drawRemarks(Graphics g, float step, Brush brush,String remark)
        {
            Font fontsj = new Font("宋体", (float)12, FontStyle.Regular);
        
            Font fonttxtRegular = new Font("宋体", (float)8, FontStyle.Regular);
            g.DrawString("备注", fontsj, new SolidBrush(Color.Black), 4, step, new StringFormat(StringFormatFlags.DirectionVertical));
            Rectangle fontRectanle = new Rectangle(12, (int)step-2, 85, 15);
            StringFormat sfFar = new StringFormat();
            sfFar.Alignment = StringAlignment.Near;
            sfFar.LineAlignment = StringAlignment.Near;

            //int count1 = GetContentLengthString("客户要早上10之前送单去 麻烦机构尽量安排一下  客户是转保");
           // Console.WriteLine("======count1==========================="+ count1);
           // int count2 = GetContentLengthString("客户要早上10之前送单去 麻烦机构尽量安排一下  客户是转保需要送单师傅帮忙拍一下行驶证和身份证客户不想在微信发我 700元（加油卡）路吉星电子狗、车载吸尘器、磁铁手机支架、金属车载充");
           // Console.WriteLine("======count2===========================" + count2);
            g.DrawString(remark, fonttxtRegular, new SolidBrush(Color.Black), fontRectanle, sfFar);
        }
        // private void DrawShouJianren();
        protected string ImgToBase64String(string Imagefilename)
        {
            try
            {
                Bitmap bmp = new Bitmap(Imagefilename);

                MemoryStream ms = new MemoryStream();
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
                ms.Close();
                return Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        private Bitmap barCode(Graphics g, string code)
        {
            // 1.设置条形码规格
            EncodingOptions encodeOption = new EncodingOptions();
            encodeOption.Height = 60; // 必须制定高度、宽度
            encodeOption.Width = 50;
            encodeOption.PureBarcode = false;
            // 2.生成条形码图片并保存
            BarcodeWriter wr = new BarcodeWriter();
            wr.Options = encodeOption;
            wr.Format = BarcodeFormat.CODE_128;
            // 生成图片
            return wr.Write(code); ;

        }
        private Bitmap qrCode(string orderNo, string licenceNo)
        {
            QrCodeEncodingOptions options = new QrCodeEncodingOptions
            {
                DisableECI = true,
                CharacterSet = "UTF-8",
                Margin = 0,
                Width = 90,
                Height = 90
            };
            Console.WriteLine("======Bitmap=========orderNo.Length==================" + orderNo.Length);
            if (orderNo.Length >11) {
                options.Width = 150;
                options.Height = 150;
            }

            //构造二维码写码器
            MultiFormatWriter writer = new MultiFormatWriter();
            Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
            hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
            hint.Add(EncodeHintType.MARGIN, 0);
            hint.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);


            BitMatrix bm = writer.encode("http://dev.ddyunf.com/ping/getPayInfo?orderId=" + orderNo, BarcodeFormat.QR_CODE, options.Width, options.Height, hint);
            BarcodeWriter barcodeWriter = new BarcodeWriter();
            barcodeWriter.Options = options;
            Bitmap map = barcodeWriter.Write(bm);
            Console.WriteLine("======Bitmap=========Width==================" + map.Width);
            Console.WriteLine("======Bitmap=========Height==================" + map.Height);
            // //将img转换成bmp格式，否则后面无法创建Graphics对象
            Bitmap bmpimg = new Bitmap(map.Width, map.Height);
            using (Graphics qrCodeg = Graphics.FromImage(bmpimg))
            {
                qrCodeg.InterpolationMode = InterpolationMode.HighQualityBicubic;
                qrCodeg.SmoothingMode = SmoothingMode.HighQuality;
                qrCodeg.CompositingQuality = CompositingQuality.HighQuality;
                qrCodeg.DrawImage(map, 0, 0);
            }
            float fontsize = 10F;
            if (orderNo.Length > 11)
            {
                fontsize = 16F;
            } 


                Bitmap logo = ConvertTextToImage(licenceNo, "宋体", fontsize, Color.White, Color.Black);
            // 获取二维码实际尺寸（去掉二维码两边空白后的实际尺寸）
            int[] rectangle = bm.getEnclosingRectangle();

            //计算插入图片的大小和位置

            int middleL = (map.Width - logo.Width) / 2;
            int middleT = (map.Height - logo.Height) / 2;


            //将二维码插入图片
           Graphics myGraphic = Graphics.FromImage(bmpimg);
            //白底
            myGraphic.FillRectangle(Brushes.White, middleL, middleT, logo.Width, logo.Height);
            myGraphic.DrawImage(logo, middleL, middleT, logo.Width, logo.Height);
            return bmpimg;



        }


        public Bitmap ConvertTextToImage(string txt, string fontname, float fontsize, Color bgcolor, Color fcolor)
        {

            StringFormat sfFar = new StringFormat();
            sfFar.Alignment = StringAlignment.Near;
            sfFar.LineAlignment = StringAlignment.Far;
            Font font = new Font(fontname, fontsize, System.Drawing.FontStyle.Regular);

            Bitmap objBmpImage = new Bitmap(1, 1);
            // Create a graphics object to measure the text's width and height.
            Graphics objGraphics = Graphics.FromImage(objBmpImage);

            // This is where the bitmap size is determined.
            int width = (int)objGraphics.MeasureString(txt, font).Width;
            int height = (int)objGraphics.MeasureString(txt, font).Height;

            Bitmap bmp = new Bitmap(width, height);


            using (Graphics graphics = Graphics.FromImage(bmp))
            {
                //graphics.PageUnit = GraphicsUnit.Display;

                graphics.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高，即消除锯齿
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.CompositingQuality = CompositingQuality.HighQuality;

                Brush brush = new SolidBrush(Color.Black);
                System.Drawing.Rectangle fontRectanle = new System.Drawing.Rectangle(0, 0, width, height);
                graphics.DrawString(txt, font, brush, 0, 0);

                graphics.Flush();
                font.Dispose();
                graphics.Dispose();
            }


            return bmp;
        }


        protected Bitmap Base64StringToImage(string strbase64)
        {
            try
            {
                byte[] arr = Convert.FromBase64String(strbase64);
                MemoryStream ms = new MemoryStream(arr);
                Bitmap bmp = new Bitmap(ms);
                ms.Close();
                return bmp;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        public Stream BytesToStream(byte[] bytes)
        {
            Stream stream = new MemoryStream(bytes);
            return stream;
        }

        public static byte[] BitmapToBytes(Bitmap Bitmap)
        {
            MemoryStream ms = null;
            try
            {
                ms = new MemoryStream();
                Bitmap.Save(ms, Bitmap.RawFormat);
                byte[] byteImage = new Byte[ms.Length];
                byteImage = ms.ToArray();
                return byteImage;
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }
            finally
            {
                ms.Close();
            }
        }

        public void StreamToFile(Stream stream, string fileName)
        {
            // 把 Stream 转换成 byte[]  
            byte[] bytes = new byte[stream.Length];
            stream.Read(bytes, 0, bytes.Length);
            // 设置当前流的位置为流的开始  
            stream.Seek(0, SeekOrigin.Begin);

            // 把 byte[] 写入文件  
            FileStream fs = new FileStream(fileName, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write(bytes);
            bw.Close();
            fs.Close();
        }

        public int  GetContentLengthString(string text)
        {
            text = text.Trim();
            text = Regex.Replace(text, "\r\n", "\n");
            int textLength = 0;
            if (text.Length > 0)
            {
                int min = 41, max = 140, urlLen = 20;
                var n = text;
                var r = Regex.Matches(text, @"http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)*");
                var total = 0;
                for (int m = 0, p = r.Count; m < p; m++)
                {
                    var url = r[m].Value;
                    var byteLen = url.Length + Regex.Matches(url, @"[^\x00-\x80]").Count;
                    if (Regex.IsMatch(url, @"^(http://t.cn)"))
                    {
                        continue;
                    }
                    else if (Regex.IsMatch(url, @"^(http:\/\/)+(weibo.com|weibo.cn)"))
                    {
                        total += byteLen <= min ? byteLen : (byteLen <= max ? urlLen : (byteLen - max + urlLen));
                    }
                    else
                    {
                        total += byteLen <= max ? urlLen : (byteLen - max + urlLen);
                    }
                    n = n.Replace(url, "");
                }
                textLength = (int)Math.Ceiling((total + n.Length + Regex.Matches(n, @"[^\x00-\x80]").Count) / 2.00d);
            }
            return textLength;

          
        }

    }
}
